#include <REGX52.H>

// 延时函数（毫秒）
void delay_ms(unsigned int ms) {
    unsigned int i, j;
    for(i = 0; i < ms; i++)
        for(j = 0; j < 123; j++);  // 基于11.0592MHz晶振
}

void main() {
    unsigned char step = 0;  // 流水灯步骤
    
    while(1) {
        // 清除所有LED（P2低电平有效，P3高电平有效）
        P2 = 0xFF;  // P2全部置高（灭）
        P3 = 0x00;  // P3全部置低（灭）
        
        // 根据步骤点亮对应LED（矩形流动顺序）
        switch(step) {
            case 0: P2 = 0xFE; break;  // P2.0 (1号灯)
            case 1: P2 = 0xFD; break;  // P2.1 (2号灯)
            case 2: P2 = 0xFB; break;  // P2.2 (3号灯)
            case 3: P2 = 0xF7; break;  // P2.3 (4号灯)
            case 4: P2 = 0xEF; break;  // P2.4 (5号灯)
            case 5: P2 = 0xDF; break;  // P2.5 (6号灯)
            case 6: P2 = 0xBF; break;  // P2.6 (7号灯)
            case 7: P2 = 0x7F; break;  // P2.7 (8号灯)
            
            case 8: P3 = 0x01; break;  // P3.0 (9号灯)
            case 9: P3 = 0x02; break;  // P3.1 (10号灯)
            case 10: P3 = 0x04; break;  // P3.2 (11号灯)
            case 11: P3 = 0x08; break;  // P3.3 (12号灯)
            case 12: P3 = 0x10; break;  // P3.4 (13号灯)
            case 13: P3 = 0x20; break;  // P3.5 (14号灯)
            case 14: P3 = 0x40; break;  // P3.6 (15号灯)
            case 15: P3 = 0x80; break;  // P3.7 (16号灯)
        }
        
        delay_ms(200);  // 每步延时
        
        // 更新步骤，形成循环
        step = (step + 1) % 16;
    }
}